#!/usr/bin/env python3
"""
优化工作流池使用示例
展示如何使用增强后的工作流池功能
"""

import asyncio
import sys
import os

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from src.research_core.workflow_pool import WorkflowPool, submit_research_task, initialize_workflow_pool, shutdown_workflow_pool


async def example_callback(result):
    """示例回调函数"""
    print(f"任务完成，结果: {result.get('final_answer', '无答案')[:100]}...")


async def main():
    """主函数演示各种工作流池功能"""
    print("=== 优化工作流池使用示例 ===\n")
    
    # 1. 初始化工作流池
    print("1. 初始化工作流池...")
    await initialize_workflow_pool()
    
    # 2. 提交单个任务
    print("\n2. 提交单个任务...")
    await submit_research_task(
        "人工智能的发展趋势是什么？", 
        example_callback,
        {"timeout": 120}  # 设置2分钟超时
    )
    
    # 3. 提交带持久化的任务
    print("\n3. 提交带持久化的任务...")
    # 注意：这里需要使用WorkflowPool实例来访问submit_with_persistence方法
    from src.research_core.workflow_pool import global_workflow_pool
    await global_workflow_pool.submit_with_persistence(
        "机器学习在医疗领域的应用",
        example_callback,
        {"timeout": 180},
        persist_state=True
    )
    
    # 4. 批量提交任务
    print("\n4. 批量提交任务...")
    questions = [
        "什么是深度学习？",
        "自然语言处理的应用场景有哪些？",
        "计算机视觉技术的最新进展是什么？"
    ]
    await asyncio.sleep(1)  # 等待前面的任务入队
    
    # 5. 获取统计信息
    print("\n5. 获取工作流池统计信息...")
    stats = global_workflow_pool.get_stats()
    print(f"工作流池状态: {'运行中' if stats['running'] else '已停止'}")
    print(f"工作线程数: {stats['workers']}")
    print(f"任务队列大小: {stats['queue_size']}")
    print(f"成功率: {stats['success_rate']:.2f}%")
    print(f"失败率: {100-stats['success_rate']:.2f}%")
    
    # 6. 等待任务完成
    print("\n6. 等待任务完成...")
    await asyncio.sleep(10)
    
    # 7. 再次获取统计信息
    print("\n7. 任务完成后的统计信息...")
    stats = global_workflow_pool.get_stats()
    print(f"已提交任务数: {stats['stats']['tasks_submitted']}")
    print(f"已完成任务数: {stats['stats']['tasks_completed']}")
    print(f"失败任务数: {stats['stats']['tasks_failed']}")
    print(f"平均处理时间: {stats['average_processing_time']:.2f}秒")
    
    # 8. 关闭工作流池
    print("\n8. 关闭工作流池...")
    await shutdown_workflow_pool()
    
    print("\n=== 示例结束 ===")


if __name__ == "__main__":
    asyncio.run(main())